﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.AccessControl;

namespace Utilidades
{
    public static class Archivo
    {
        public static void Escribir(string mensaje, string nombreArchivo,string usuario,string carpetaABloquear)
        {
            try
            {
                StreamWriter writer;
                if (!File.Exists(nombreArchivo))
                    writer = File.CreateText(nombreArchivo);
                else
                {
                    writer = File.AppendText(nombreArchivo);

                }
                desbloquear(carpetaABloquear);
                eLog(Environment.MachineName, usuario, mensaje, writer);
                writer.Close();
                bloquear(carpetaABloquear);
                
            }
            catch (Exception)
            {
                throw new Exception("Hubo un error al momento de almacenar la acción");
            }
        }
        public static void bloquear(string path)
        {
            string User = System.Environment.UserDomainName +"\\"+ System.Environment.UserName;
            DirectoryInfo miDirectorioInfo= new DirectoryInfo(path);
            DirectorySecurity miDirectorioSec = miDirectorioInfo.GetAccessControl();
            miDirectorioSec.AddAccessRule(new FileSystemAccessRule(User,FileSystemRights.Read,AccessControlType.Deny));
            miDirectorioInfo.SetAccessControl(miDirectorioSec);
        }
        private static void desbloquear(string path)
        {
            string User = System.Environment.UserDomainName + "\\" + System.Environment.UserName;
            DirectoryInfo miDirectorioInfo = new DirectoryInfo(path);
            DirectorySecurity miDirectorioSec = miDirectorioInfo.GetAccessControl();
            miDirectorioSec.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Read, AccessControlType.Allow));
            miDirectorioInfo.SetAccessControl(miDirectorioSec);
        }
        public static List<string> leer(string nombrearchivo)
        {
            try
            {
                if (File.Exists(nombrearchivo))
                {
                    StreamReader objReader = new StreamReader(nombrearchivo);
                    string sLine = "";
                    List<string> logs = new List<string>();

                    while (sLine != null)
                    {
                        sLine = objReader.ReadLine();
                        if (sLine != null)
                            logs.Add(sLine);
                    }
                    objReader.Close();
                    return logs;
                }
                else
                    throw new Exception("El archivo no se encuentra");
            }
            catch (Exception ex)
            {

                throw new Exception("Hubo un error al leer los archivos LOGS vuleva a intentarlo más tarde");
            }
        }
        private static void eLog(string pc, string usuario, string mensaje, StreamWriter sw)
        {

            string fecha = DateTime.Now.ToString();
            mensaje = fecha + ";" + pc + ";" + usuario + ";" + mensaje + ";";
            Console.WriteLine(mensaje);
            sw.WriteLine(mensaje);
        }
    }
}
